﻿using NewLife.Serialization;
using Xunit;

namespace XUnitTest.Serialization;

public class SerialHelperTests
{
    [Fact]
    public void Test1()
    {
        var json = """
            {
                "Debug":  "True",
                "LogLevel":  1234,
                "LogPath":  "xxx",
                "NetworkLog":  "255.255.255.255:514",
                "LogFileFormat":  "{0:yyyy_MM_dd}.log",
                "TempMoney":  56.78,
                "PluginPath":  "Plugins",
                "PluginServers": [ "http://x.newlifex.com/", "http://127.0.0.1" ],
                "Sys":  {
                    "Name":  "NewLife.Cube",
                    "Version":  "",
                    "DisplayName":  "魔方平台",
                    "Company":  "新生命开发团队",
                    "Develop":  "True",
                    "Enable":  "True",
                    "InstallTime":  "2019-12-30 21:05:09",
                    "xxx": {
                        "yyy": "zzz"
                    }
                }
            }
            """;
        var dic = json.DecodeJson();

        var cls = dic.BuildModelClass("MyModel");

        var model = """
            public class MyModel
            {
            	public String Debug { get; set; }

            	public Int32 LogLevel { get; set; }

            	public String LogPath { get; set; }

            	public String NetworkLog { get; set; }

            	public String LogFileFormat { get; set; }

            	public Double TempMoney { get; set; }

            	public String PluginPath { get; set; }

            	public String[] PluginServers { get; set; }

            	public SysModel Sys { get; set; }

            	public class SysModel
            	{
            		public String Name { get; set; }

            		public String Version { get; set; }

            		public String DisplayName { get; set; }

            		public String Company { get; set; }

            		public String Develop { get; set; }

            		public String Enable { get; set; }

            		public String InstallTime { get; set; }

            		public XxxModel Xxx { get; set; }

            		public class XxxModel
            		{
            			public String Yyy { get; set; }
            		}
            	}
            }

            """;
        Assert.Equal(model, cls);
    }
}